package com.zzq.my.jetpacks.jectpackapp.utils

import android.content.Context
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView

/**
 * 描述：class describe
 * 作者：zhuangzeqin
 * 时间: 2022/8/21-16:23
 * 邮箱：zzq@eeepay.cn
 * 备注:
 * 左侧的间距+右侧的间距为设置的间距，在视觉上达到等分的效果。需要满足两个条件

各个Item的大小相等，即各列的left+right 值相等
各列的间距相等，即前列的right + 后列的left = 列间距
得出公式

某列的左间距 =  所在列 * （列间距 * （列数）/ 1）

某列的右间距 = 列间距 - 后列的左间距 = 列间距 - （所在列 + 1）* （列间距 * （列数）/ 1）


binding.paperContentView.addItemDecoration(
GridSpaceItemDecoration(
4,
0F,
DisplayUtil.dp2px(requireContext(), 25F)
)
)
其中DisplayUtil是dp转px的工具类，大家按自己的需求传入列间距和行间距就可以了。
 */
class GridSpaceItemDecoration(
    private val spaceCount: Int,
    private val rowSpace: Float,
    private val columnSpacing: Float
) : RecyclerView.ItemDecoration() {

    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        val position = parent.getChildAdapterPosition(view) // 获取view 在adapter中的位置。

        val column = position % spaceCount // view 所在的列


        outRect.left = (column * columnSpacing / spaceCount).toInt() // column * (列间距 * (1f / 列数))

        outRect.right =
            (columnSpacing - (column + 1) * columnSpacing / spaceCount).toInt() // 列间距 - (column + 1) * (列间距 * (1f /列数))

        // 如果position > 行数，说明不是在第一行，则不指定行高，其他行的上间距为 top=rowSpace
        if (position >= spaceCount) {
            outRect.top = rowSpace.toInt() // item top
        }
    }
}

fun dp2px(context: Context, dipValue: Float): Int {
    val scale = context.resources.displayMetrics.density
    return (dipValue * scale + 0.5f).toInt()
}